EMR-EKR1 ASM ; TESTPROGRAMM EMR, letzter Stand mit eingearbeiteten Notizen ; "EKR1" - MODIFIZIERT ;*************************************** ; ;VEREINBARUNGEN ; DISPL := %10 ;ANZEIGESPEICHER DISPLL := %11 KEYB := %12 ;TAST.-SPEICHER KEYBL := %13 ADW := %14 ;AD-WERT ADWL := %15 DAW := %16 ;DA-WERT DAWL := %17 ADP := %18 ;ADRESSENPOINTER ADPL := %19 KEY0 := %1A ;TAST.-ZWISCHEN-SPEICHER KEY1 := %1B KEY2 := %1C SZP := %1D ;ALLG. ZWischen-SPEICHER SEGM := %1E ;SEGMENT-SPEICHER KEYP := %1F ;TAST.-POSITION ; ; ; ;INITIALISIERUNG ; $ ABSP %0C p000C 8F BEGIN DI p000D E6 F8 17 LD P01M,#%(2)00010111 ;P04-P07=OUT, NORM.,INTERN P10-P17=AD0-7, P00-P03=A8-A11 p0010 E6 F6 00 LD P2M,#%0 ;ALLES OUTPUT p0013 LD 2,#%0 ;P2 LOW p0016 LD P3M,#%(2)11000001 ;PAR.,SIO, P31/36=TIN/TOUT, P33/34=IN/OUT, P32/35=IN/OUT, P2->TP ; ; ; ;SEGMENTANZEIGE ; p0019 E6 10 12 LD DISPL,#%12 ;ANZEIGE-SPEICHER LADEN p001C E6 11 34 LD DISPLL,#%34 p001F 31 10 SRP #%10 ;REG.-POINTER SETZEN p0021 E4 10 1E ANZ LD SEGM,DISPL ;SEGMENTWERT UMLAGERN p0024 E4 1E 00 LD 0,SEGM ; - H-TEIL p0027 E6 18 0E LD ADP,#%E ;ADR.-POINTER LADEN p002A E6 19 00 LD ADPL,#%0 ; - (K4) p002D 82 D8 LDE R13,@RR8 ;ADR. AUSGEBEN p002F 46 1D 0F OR SZP,#%0F ;L-NIBBLE AUSBLENDEN p0032 60 1D COM SZP ;TASTE NICHT GEDRUECKT? p0034 6B 06 JR Z,ST2 p0036 56 10 0F AND DISPL,#%0F ;H-NIBBLE -> 0 p0039 54 1D 10 AND DISPL,SZP ; " MIT SZP (H-NIBBL) LADEN p003C F0 1E ST2 SWAP SEGM ;L-NIBBLE-S.-> H p003E E4 1E 00 LD 0,SEGM ;AUSGEBEN p0041 E6 18 09 LD ADP,#%9 ;ADR.-POINTER AUF K3 STELLEN p0044 82 D8 LDE R13,@RR8 ;ADR. AUSGEBEN p0046 46 1D 0F OR SZP,#%0F ;L-NIBBLE AUSBLENDEN p0049 60 1D COM SZP ;TASTE GEDR.? p004B 6B 08 JR Z,ST3 p004D 56 10 F0 AND DISPL,#%F0 ;L-NIBBLE -> 0 p0050 F0 1D SWAP SZP ;H-NIBBLE -> L-NIBBLE p0052 54 1D 10 AND DISPL,SZP ;L-NIBBLE MIT SZP (L-NIBBLE) LADEN p0055 E4 11 1E ST3 LD SEGM,DISPLL ;SEGMENTWERT UMLAGERN p0058 E4 1E 00 LD 0,SEGM ; - L-TEIL p005B E6 18 0B LD ADP,#%B ;ADR.-POINTER AUF K2 STELLEN p005E 82 D8 LDE R13,@RR8 ;ADR. AUSGEBEN p0060 46 1D 0F OR SZP,#%0F ;L-NIBBLE AUSBLENDEN p0063 60 1D COM SZP ;TASTE GEDR.? p0065 6B 06 JR Z,ST4 p0067 56 11 0F AND DISPLL,#%0F ;H-NIBBLE -> 0 p006A 54 1D 11 AND DISPLL,SZP ;H-NIBBLE MIT SZP (H-NIBBLE) LADEN p006D F0 1E ST4 SWAP SEGM ;L.-NIBBLE-S.-> H p006F E4 1E 00 LD 0,SEGM ;AUSGEBEN p0072 E6 18 0D LD ADP,#%D ;ADR.-POINTER AUF K1 STELLEN p0075 82 D8 LDE R13,@RR8 ;ADR. AUSGEBEN p0077 46 1D 0F OR SZP,#%0F ;L-NIBBLE AUSBLENDEN p007A 60 1D COM SZP ;TASTE GEDR.? p007D 6B 08 JR Z,ST1 p007E 56 11 F0 AND DISPLL,#%F0 ;L-NIBBLE -> 0 p0081 F0 1D SWAP SZP ;H-NIBBLE -> L-NIBBLE p0083 54 1D 11 AND DISPLL,SZP ;L-NIBBL MIT SZP (L-NIBBLE) LADEN p0086 8B 78 ST1 JR,ANZ ; ??? (Ausdruck fehlt!) p001F 31 10 SRP #%10 ;REG.-POINTER SETZEN p0021 E4 10 1E ANZ1 LD SEGM,DISPL ;SEGMENTWERT UMLAGERN p0024 E4 1E 00 LD 0,SEGM ; - H-TEIL p0027 E6 18 0E LD ADP,#%E ;ADR.-POINTER LADEN p002A E6 19 00 LD ADPL,#%0 p002D 82 D8 LDE R13,@RR8 ;ADR. AUSGEBEN p002F 46 1D 0F OR SZP,#%0F ;L-NIBBLE AUSBLENDEN p0032 60 1D COM SZP ;TASTE GEDR.? p0034 6B 06 56 JRZ ST21 ; - Achtung! -> Sprungfehler? - doppeltes Ziel? -> korrigiert p0037 56 10 0F AND DISPL,#%0F ;H-NIBBLE -> 0 p003A 54 1D 10 AND DISPL,SZP ; " MIT SZP (H-NIBBLE) LADEN p003D F0 1E ST21 SWAP SEGM ;L.-NIBBLE-S.-> H p003F E4 1E 00 LD 0,SEGM ;AUSGEBEN p0042 E6 18 09 LD ADP,#%9 ;ADR.-POINTER AUF K3 STELLEN p0045 92 8E LDE @RR8,R14 ;ADR. AUSGEBEN p0047 E4 11 1E LD SEGM,DISPLL ;SEGMENTWERT UMLAGERN p004A E4 1E 00 LD 0,SEGM ; - L.-TEIL p004D E6 18 0B LD ADP,#%B ;ADR.-POINTER AUF K2 STELLEN p0050 92 8E LDE @RR8,R14 ;ADR. AUSGEBEN p0052 F0 1E SWAP SEGM ;L.-NIBBLE-S.-> H p0054 E4 1E 00 LD 0,SEGM ;AUSGEBEN p0057 E6 18 0D LD ADP,#%D ;ADR.-POINTER AUF K1 STELLEN p005A 92 8E LDE @RR8,R14 ;ADR. AUSGEBEN p005C 8B C3 JR ANZ ; RUECKSPRUNG ; ; - end code - ; ... noch einige handschriftliche Erklärungen und Berichtigungen zum Code: DISPL: |0001|0010| = 12H -> SEGM: |0001|0010| DISPLL: |0011|0100| = 34H P0: |0001|xxxx| -> AUSGABE (nur H-Teil), L-Teil = A8 ... A11 SZP: |1011|xxxx| = R13 <- @RR8 SZP: |1011|1111| <- OR 0F SZP: |0100|0000| <- COM SZP -> JRZ nein, dann DISPL: |0000|0010| <- AND 0F DISPL: |0000|0000| <- AND SZP -> nein, besser OR ...